package entity;

import java.util.ArrayList;
import java.util.List;

import dao.BookDao;

/**
 *购物车，实现了商品的添加、删除、列表、清空、总价等操作
 */
public class Cart {
	//items存放用户购买的所有商品
	private List<CartItem> items = new ArrayList<CartItem>();
	
	public boolean add(CartItem c){
		//先判断用户有没有购买过该商品
		//如果买过，返回false
		//如果没买过，添加到items集合
		for (int i = 0; i < items.size(); i++) {
			int id = c.getProduct().getId().intValue();
			if (id == items.get(i).getProduct().getId().intValue()) {
				return false;
			}
		}
		items.add(c);
		return true;
	}
	
	/**
	 * 购物车列表
	 * @return
	 */
	public List<CartItem> list(){
		return items;
	}
	
	public void delete(int id){
		for (int i = 0; i < items.size(); i++) {
			if (id == items.get(i).getProduct().getId().intValue()) {
				items.get(i).getProduct().setHas_deleted(1);
				return;
			}
		}
	}
	
	/**
	 * 修改购物车中商品的数量
	 * @param id
	 * @param count
	 */
	public void modify(int id, int count){
		for (int i = 0; i < items.size(); i++) {
			if(id == items.get(i).getProduct().getId().intValue()){
				items.get(i).setCount(count);
				return;
			}
		}
	}
	
	/**
	 * 购物车中商品的总价
	 * @return
	 */
	public double getTotalPrice(){
		double totalPrice = 0.0;
		for (int i = 0; i < items.size(); i++) {
			CartItem ci = items.get(i);
			if (ci.getProduct().getHas_deleted().intValue() == 0) {
				totalPrice += ci.getProduct().getDang_price().doubleValue() * ci.getCount();
			}
		}
		return totalPrice;
	}
	
	/**
	 * 将购物车中的商品转换为字符串
	 * @return
	 */
	public String cartToString(){
		StringBuffer result = new StringBuffer();
		for (int i = 0; i < items.size(); i++) {
			result.append(items.get(i).getProduct().getId() + ",");
			result.append(items.get(i).getCount() + ",");
			result.append(items.get(i).getProduct().getHas_deleted() + ";");
		}
		return result.toString();
	}
	
	/**
	 * 将字符串还原为购物车中的商品信息
	 * @param cartInfo
	 */
	public void stringToCart(String cartInfo){
		if (cartInfo == null || cartInfo.length() == 0) {
			return;
		}
		String[] cartInfos = cartInfo.split(";");
		for (int i = 0; i < cartInfos.length; i++) {
			String[] msgs = cartInfos[i].split(",");
			Integer id = Integer.parseInt(msgs[0]);
			int count = Integer.parseInt(msgs[1]);
			Integer has_deleted = Integer.parseInt(msgs[2]);
			CartItem item = new CartItem();
			item.setCount(count);
			try {
				BookDao dao = new BookDao();
				Book book = dao.queryBookById(id);
				if (book != null) {
					book.setHas_deleted(has_deleted);
					item.setProduct(book);
				} else {
					item.setProduct(book);
				}
			} catch (Exception e) {
				item.setProduct(null);
			}
			items.add(item);
		}
	}
	
	/**
	 * 恢复购买
	 * @param id
	 */
	public void rebuy(int id){
		for (int i = 0; i < items.size(); i++) {
			if (id == items.get(i).getProduct().getId().intValue()) {
				items.get(i).getProduct().setHas_deleted(0);
			}
		}
	}
	
	/**
	 * 清空购物车
	 */
	public void clear(){
		items.clear();
	}
	
	/**
	 * 清空已经删除的商品
	 */
	public void clearDeleted(){
		for (int i = items.size() - 1; i >= 0; i--) {
			if (items.get(i).getProduct().getHas_deleted().intValue() == 1) {
				items.remove(i);
			}
		}
	}
	
	/**
	 * 清空购物车中有效的商品
	 */
	public void clearValid(){
		for (int i = items.size() - 1; i >= 0; i--) {
			if (items.get(i).getProduct().getHas_deleted().intValue() == 0) {
				items.remove(i);
			}
		}
	}
	
	/**
	 * 一共节省的价钱
	 */
	public double getSaveMoney(){
		double sf = 0.0;
		double sd = 0.0;
		for (int i = 0; i < items.size(); i++) {
			if (items.get(i).getProduct().getHas_deleted().intValue() == 0) {
				sf += items.get(i).getProduct().getFixed_price().doubleValue() * items.get(i).getCount();
				sd += items.get(i).getProduct().getDang_price().doubleValue() * items.get(i).getCount();
			}
		}
		return sf - sd;
	}
}
